package br.ucb.damas.control.jogo;

import javax.swing.JFrame;

import br.ucb.damas.control.jogo.jogadas.Jogada;
import br.ucb.damas.control.jogo.jogadas.JogadaComputador;
import br.ucb.damas.control.jogo.jogadas.JogadaJogador;
import br.ucb.damas.control.jogo.valicacoes.ValidaJogo;
import br.ucb.damas.entidades.Cor;
import br.ucb.damas.entidades.Peca;
import br.ucb.damas.ui.paineis.tabuleiro.Tabuleiro;

/**
 * essa classe eh a controladora do jogo,aqui se faz todas as
 * decisoes,controla as jogadas e etc
 * @author eduardo
 *
 */
public class Jogo {
	
	private Tabuleiro tabuleiro;
	private JFrame telaPrincipal;
	
	
	public Jogo(JFrame frame,Tabuleiro tabuleiro) {
		setTabuleiro(tabuleiro);
		setTelaPrincipal(frame);
		getTabuleiro().setPecas(getPecasIniciais());
	}
	
	public Jogo(Tabuleiro tabuleiro){
		JFrame frame = new JFrame();
		frame.setSize(1000, 1000);
		frame.setContentPane(tabuleiro);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		
		setTabuleiro(tabuleiro);
		setTelaPrincipal(frame);
		getTabuleiro().setPecas(getPecasIniciais());
	}
	
	
	/**
	 * obtem a disposicao inicial das pecas
	 * @return pecas
	 */
	public Peca[][] getPecasIniciais(){
//		return new Peca[][]{
//				{null,new Peca(Cor.PRETA),null,new Peca(Cor.PRETA),null,new Peca(Cor.PRETA),null,new Peca(Cor.PRETA)},
//				{new Peca(Cor.PRETA),null,new Peca(Cor.PRETA),null,new Peca(Cor.PRETA),null,new Peca(Cor.PRETA),null},
//				{null,new Peca(Cor.PRETA),null,new Peca(Cor.PRETA),null,new Peca(Cor.PRETA),null,new Peca(Cor.PRETA)},
//				{null,null,null,null,null,null,null,null},
//				{null,null,null,null,null,null,null,null},
//				{new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA),null},
//				{null,new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA)},
//				{new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA),null}
//		};
		return new Peca[][]{
				{null,new Peca(Cor.PRETA),null,new Peca(Cor.PRETA),null,new Peca(Cor.PRETA),null,new Peca(Cor.PRETA)},
				{new Peca(Cor.PRETA),null,new Peca(Cor.PRETA),null,new Peca(Cor.PRETA),null,new Peca(Cor.PRETA),null},
				{null,null,null,new Peca(Cor.PRETA),null,null,null,new Peca(Cor.PRETA)},
				{null,null,null,null,null,null,null,null},
				{null,new Peca(Cor.PRETA),null,new Peca(Cor.PRETA),null,new Peca(Cor.PRETA),null,null},
				{new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA),null},
				{null,new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA)},
				{new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA),null,new Peca(Cor.BRANCA),null}
		};
	}
	

	/**
	 * aqui se controla o jogo
	 */
	public void iniciar(){
		telaPrincipal.setVisible(true);
		Peca[][] pecas=getTabuleiro().getPecas();
		Jogada jogadaJogador    = new JogadaJogador(getTabuleiro());
		Jogada jogadaComputador = new JogadaComputador();
		Jogada atual = jogadaJogador;
		while(!ValidaJogo.isJogoAcabado(pecas)){
			
			if(atual.jogar()){
				System.out.println("jogou");
				atual=trocarVez(jogadaComputador, jogadaJogador, atual);	
				atual.reset();
			}
			this.tabuleiro.repaint();						
			
		}
	}
	
	
	public Jogada trocarVez(Jogada jogadaComputador,Jogada jogadaJogador,Jogada atual){
		if(atual==jogadaComputador)
			return jogadaJogador;
		return jogadaComputador;
	}
	public void setTabuleiro(Tabuleiro tabuleiro) {
		this.tabuleiro = tabuleiro;
	}
	public Tabuleiro getTabuleiro() {
		return tabuleiro;
	}
	public void setTelaPrincipal(JFrame telaPrincipal) {
		this.telaPrincipal = telaPrincipal;
	}
	public JFrame getTelaPrincipal() {
		return telaPrincipal;
	}
}
